Amazon Linux 2用 AWS Systems ManagerでOSの簡易設定ドキュメントを作ってみた
おはようございます、加藤です。AWS Systems Manager(以降、SSM)でAmazon Linux2を簡易設定するドキュメントを作ったので公開します。
できること
簡易設定という言葉だけでは何ができるかわからないので説明します。今回作成したドキュメントをAmazon Linux2に対して以下の処理を実行できます。
- ホスト名変更
- YUMアップデート
- セキュリティアップデートのみも可能
- タイムゾーン変更
- 言語設定変更
SSMを使って処理を行うので、アウトバウンド通信許可 or SSMへのVPCエンドポイントがあればSSHで端末に接続せずにこれらの作業が行なえます。
作ったドキュメント
ドキュメントは下記のリンクを参考にYAML形式で作成しました。
SSM ドキュメントの構文 - AWS Systems Manager
--- schemaVersion: '2.2' description: Software Inventory Policy Document. parameters: hostname: type: String default: "" description: "(任意) ホスト名を入力してください。入力がない場合は現在のホスト名が維持されます。" update: type: String default: "none" description: "YUMアップデートの動作を選択してください。" allowedValues: - all - security - none timezone: type: String description: "タイムゾーンを入力してください。" default: "Asia/Tokyo" language: type: String description: "ターミナルの言語を入力してください。" default: "ja_JP.UTF-8" mainSteps: - action: aws:runShellScript name: hostname inputs: runCommand: - if [[ -n "{{ hostname }}" ]]; then hostnamectl set-hostname {{hostname}} ; fi - action: aws:runShellScript name: update inputs: runCommand: - if [[ {{ update }} == "all" ]]; then yum -y update ; fi - if [[ {{ update }} == "security" ]]; then yum --security -y update ; fi - if [[ {{ update }} == "none" ]]; then echo "Did not update" ; fi - action: aws:runShellScript name: timezone inputs: runCommand: - timedatectl set-timezone {{ timezone }} - echo "Time zone changed to {{ timezone }}" - action: aws:runShellScript name: language inputs: runCommand: - echo "LANG={{ language }}" > /etc/sysconfig/i18n - echo "LANG={{ language }}" >> /home/ec2-user/.bash_profile - echo "Terminal Language changed to {{ language }}"
注意事項
このドキュメントはべき等性を考慮していません。具体的には49行目の言語設定の箇所でec2-userの.bash_profileに対して追記処理があります。
ドキュメントの登録
ドキュメントをSSMに登録します。
CLIの場合
ドキュメントをファイルに保存して以下のコマンドを実行します。
aws ssm create-document --document-format YAML --content file:///Users/kato.ryo/Projects/AWS/SSM/Documents/User-AmazonLinux2-SetupScritp.yml --name "User-AmazonLinux2-SetupScript" --document-type "Command"
Amazon Management Consoleの場合
SSMのドキュメント画面を開きドキュメント作成をクリックします。
名前を入力し、コンテンツ形式をYAMLに設定します。
上記のUser-AmazonLinux2-SetupScript.ymlをフォームに貼り付けて、ドキュメントの作成をクリックします。
ドキュメントの実行
ドキュメントを使用して、RunCommandします。
作業対象のEC2を作成します。このEC2にはSSMを利用するためのロールをアタッチする必要があります。下記のリンクを参考にしてください。
Systems ManagerのRunCommandでSSHを使わずにShellライクにコマンドを実行する
SSMのRunCommand画面を開き、コマンドの実行をクリックします。
作成した、ドキュメントとEC2を選択します。
パラメータを設定し、実行します。
無事に成功しました!
EC2にSSHでログインして、状態を確認します。
hostnamectl status Static hostname: blogtest Pretty hostname: BlogTest Icon name: computer-vm Chassis: vm Machine ID: 6c0dbeffde9846e48691730623978522 Boot ID: d48a1ee7c1294de89540f82e1370b3d4 Virtualization: xen Operating System: Amazon Linux 2 (2017.12) LTS Release Candidate CPE OS Name: cpe:2.3:o:amazon:amazon_linux:2 Kernel: Linux 4.9.76-38.79.amzn2.x86_64 Architecture: x86-64 sudo yum update 読み込んだプラグイン:langpacks, priorities, update-motd No packages marked for update timedatectl status Local time: 月 2018-04-09 15:27:00 JST Universal time: 月 2018-04-09 06:27:00 UTC RTC time: 月 2018-04-09 06:26:59 Time zone: Asia/Tokyo (JST, +0900) NTP enabled: yes NTP synchronized: no RTC in local TZ: no DST active: n/a head -n 1 /etc/sysconfig/i18n LANG=ja_JP.UTF-8 tail -n 1 ~/.bash_profile LANG=ja_JP.UTF-8
意図した変更が全て適用されていました!